package work_Experiment_3;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 34255
 * Date: 2024-12-14
 * Time: 15:22
 */
import javax.swing.*;
import java.awt.*;

public class BallAnimation extends JPanel implements Runnable {
    private int x = 0, y = 100, size = 20;  // 初始球的坐标和大小

    public static void main(String[] args) {
        // 创建一个JFrame窗口，并设置大小、关闭操作、可见性
        JFrame frame = new JFrame();
        BallAnimation ballAnimation = new BallAnimation();  // 创建BallAnimation实例
        frame.add(ballAnimation);  // 将BallAnimation面板添加到窗口
        frame.setSize(800, 400);  // 设置窗口大小
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // 设置窗口关闭时退出程序
        frame.setVisible(true);  // 显示窗口

        // 启动动画线程
        new Thread(ballAnimation).start();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);  // 调用父类方法进行绘制初始化
        g.setColor(Color.RED);  // 设置绘制颜色为红色
        g.fillOval(x, y, size, size);  // 绘制一个填充的红色圆形（球）
    }

    @Override
    public void run() {
        // 当球还没有完全移出窗口时，继续动画
        while (x < getWidth() - size) {
            x += 5;  // 每次循环将球横坐标增加5
            size += 1;  // 每次循环将球的大小增加1

            repaint();  // 重绘组件以更新画面

            try {
                Thread.sleep(30);  // 每30毫秒更新一次画面，控制动画速度
            } catch (InterruptedException e) {
                e.printStackTrace();  // 捕获并打印异常
            }
        }
    }
}
